import json
import os

# 常量定义
LIBRARY_FILE_PATH = os.path.join("data", "media_library.json") #定义了一个常量 LIBRARY_FILE_PATH

def load_all_media_from_file(): #load_all_media_from_file 函数
    """
    从文件中加载所有媒体条目
    如果文件不存在或JSON格式错误，返回空列表
    """
    if not os.path.exists(LIBRARY_FILE_PATH):
        return []
    try:
        with open(LIBRARY_FILE_PATH, "r", encoding="utf-8") as file:
            data = json.load(file)
            # 验证数据是否为字典列表
            if isinstance(data, list):
                valid_data = []
                for item in data:
                    if isinstance(item, dict):
                        valid_data.append(item)
                return valid_data
            return []
    except json.JSONDecodeError:
        return []

def save_media_item_to_file(new_item_dict): #save_media_item_to_file 函数
    """
    将新的媒体条目添加到文件中
    """
    all_media = load_all_media_from_file()
    all_media.append(new_item_dict)
    # 修改点1：确保 data 目录存在
    os.makedirs(os.path.dirname(LIBRARY_FILE_PATH), exist_ok=True)
    with open(LIBRARY_FILE_PATH, "w", encoding="utf-8") as file:
        json.dump(all_media, file, ensure_ascii=False, indent=4)

# 修改：去掉 self 参数
def update_media_item_in_file(updated_data): #update_media_item_in_file 函数
    """更新媒体库文件（支持单个条目或整个列表）"""
    try:
        # 加载现有数据
        all_media = load_all_media_from_file()

        if isinstance(updated_data, list):
            # 如果传入的是完整列表，直接覆盖
            os.makedirs(os.path.dirname(LIBRARY_FILE_PATH), exist_ok=True)
            with open(LIBRARY_FILE_PATH, "w", encoding="utf-8") as file:
                json.dump(updated_data, file, ensure_ascii=False, indent=4)
            return True

        # 如果传入的是单个条目，找到并替换它
        item_id = updated_data.get("id")
        if not item_id:
            print("错误：更新的条目缺少ID字段")
            return False

        # 查找匹配ID的条目并更新
        for i, item in enumerate(all_media):
            if item.get("id") == item_id:
                all_media[i] = updated_data
                break

        os.makedirs(os.path.dirname(LIBRARY_FILE_PATH), exist_ok=True)
        with open(LIBRARY_FILE_PATH, "w", encoding="utf-8") as file:
            json.dump(all_media, file, ensure_ascii=False, indent=4)
        return True

    except Exception as e:
        print(f"更新文件失败: {e}")
        return False